package com.unitechs.commons.utils;

import lombok.extern.slf4j.Slf4j;

import java.util.Collection;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;

/**
 * 正则工具类
 *
 * @author ZhouYz
 * @since 1.0.0
 */
@Slf4j
public final class ZyucPatternUtil {
    private ZyucPatternUtil() {
        throw new AssertionError();
    }

    /**
     * 判断字符串是否是一个正则
     */
    public static boolean zyucIsRegexPattern(String input) {
        try {
            Pattern.compile(input);
            return true; // 编译成功，是一个有效的正则表达式
        } catch (PatternSyntaxException e) {
            return false; // 编译失败，不是一个有效的正则表达式
        }
    }

    /**
     * 是否包含正则部分
     *
     * @param regex 希望匹配的正则表达式
     * @param text  待检查的字符串
     */
    public static boolean zyucIsContainsPattern(String text, String regex) {
        if (!zyucIsRegexPattern(regex)) {
            log.error("regex不是一个正则");
            return false;
        }
        // 编译正则表达式
        Pattern pattern = Pattern.compile(regex);
        // 创建 Matcher 对象，用于匹配文本
        Matcher matcher = pattern.matcher(text);
        // 查找匹配部分
        return matcher.find();
    }


    /**
     * 是否包含颜色正则
     *
     * @param color 颜色
     * @param text  待检查的字符串
     */
    public static boolean zyucIsContainsPatternColor(String text, String color) {
        String regex = "<font.*color='" + color + "'>(.*?)</font>";

        if (!zyucIsRegexPattern(regex)) {
            log.error("regex不是一个正则");
            return false;
        }

        // 编译正则表达式
        Pattern pattern = Pattern.compile(regex);

        // 创建 Matcher 对象，用于匹配文本
        Matcher matcher = pattern.matcher(text);

        // 查找匹配部分
        return matcher.find();
    }

    /**
     * 判断字符串是否能匹配这些正则
     * @param input     字符串
     * @param regexList 正则集合
     */
    public static boolean zyucMatchesAny(String input, Collection<String> regexList) {
        for (String regex : regexList) {
            if (!zyucIsRegexPattern(regex)) {
                continue;
            }
            Pattern pattern = Pattern.compile(regex);
            Matcher matcher = pattern.matcher(input);
            if (matcher.matches()) {
                return true; // 字符串与某个正则表达式匹配
            }
        }
        return false; // 字符串与集合中的任何正则表达式都不匹配
    }


}
